iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
0
自我挑戰組

資料結構大便當系列 第 13

[Day 13] linked-list + queue

  • 分享至 

  • xImage
  •  

糟糕,快沒梗了QQ 這樣真的可以 30 天嗎?


延續昨天文章,今天改使用 linked-list 來實現 queue
題目直接複製課本(增加被搜尋機率?)

Show how to implement a queue or stack using a linked list.

https://ithelp.ithome.com.tw/upload/images/20190925/201202507X8ZKRN23q.png

一樣先上 linked-list 的圖,並開始複習一下 queue

佇列 (queue) 其操作方式為從尾端推入,從頭端推出,是一種 FIFO (First-In, First-Out) 的資料結構。如同排隊般的資料結構。

https://ithelp.ithome.com.tw/upload/images/20190925/2012025039UputMj9f.png

先定義 linked-list

struct node {
   int data;
   struct node *next;
};

因為 Queue 需要知道隊伍前與隊伍後的資料,所以需要多宣告一個 pointer 記錄「最後一個node」。
並且多宣告一個 temp 當暫存

struct node* front = nullptr;
struct node* back = nullptr;
struct node* temp;

Enqueue 的部份:
在使用 Push 將元素插入 queue 時。如果目前的 back 為 nullptr,表示 queue 為空,因此宣告並插入 val。
否則,就在後方插入 val,並將該節點設置為 back。

void Enqueue() {
   int val;
   cout<<"Insert the element in queue : "<<endl;
   cin>>val;
   if (back == nullptr) {
      back = (struct node *)malloc(sizeof(struct node));
      back->next = nullptr;
      back->data = val;
      front = back;
   } else {
      temp=(struct node *)malloc(sizeof(struct node));
      back->next = temp;
      temp->data = val;
      temp->next = nullptr;
      back = temp;
   }
}

Dequeue 的部份:
在使用 pop 將元素 dequeue 時,如果 queue 中沒有元素,則回傳 underflow。
如果 queue 中只有一個元素,將該元素刪除後,需要將 front 跟 back 設置為 NULL。
其他就當將刪除前面的元素時,將 front 的元素指向下一個元素而已。

void Dequeue() {
   temp = front;
   if (front == nullptr) {
      cout<<"Underflow"<<endl;
      return;
   } else
   if (temp->next != nullptr) {
      temp = temp->next;
      cout<<"Element deleted from queue is : "<<front->data<<endl;
      free(front);
      front = temp;
   } else {
      cout<<"Element deleted from queue is : "<<front->data<<endl;
      free(front);
      front = nullptr;
      back = nullptr;
   }
}

#資料結構不難,找到 code 而已

參考:https://www.tutorialspoint.com/cplusplus-program-to-implement-queue-using-linked-list


上一篇
[Day 12] linked-list + stack
下一篇
[Day 14] linked-list II
系列文
資料結構大便當30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言